//
//  main.c
//  bubbleSort
//
//  Created by chenyh on 2021/1/25.
//

#include <stdio.h>

void swap(int *p1,int *p2);

/* 冒泡排序算法的核心是指针的操作:
 1、比较指针所指向的值的大小；
 2、交换指针所指向的内容；
 3、指针后移，既指针指向下一个元素；
 4、指针前移，既指针指向前面一个元素；
 */
void bubbleSort(int *begin,int *end)
{
    int flag = 1;
    int *p1 = begin; //p1指向数组的首元素
    int *p2 = end;   //p2指向数组的尾元素
    int *pNext;      //pNext指向p1所指向的元素的下一个元素
    while (p2 != begin) {
        p1 = begin;
        flag = 1;
        while (p1 != p2) {
            pNext = p1+1;
            if (*p1 > *pNext) {     //比较指针所指向的值的大小
                swap(p1,pNext);     //交换两个指针的内容
                flag = 0;           //flag=0，表示2个指针的内容交换
            }
            p1++;                   //p1指针后移
        }
        if (flag) return;         //没有交换,表示已经有序，则直接返回
        p2--;                      //p2指针迁移
        
    }
}
typedef void * iterator_t;
typedef void (*iterator_next_t)(iterator_t *p_iter);
typedef void (*iterator_prev_t)(iterator_t *p_iter);
//迭代器接口（if表示interface，由具体容器实现,比如，链表。数组等）
typedef struct _iterator_if {
    iterator_next_t pfn_next;
    iterator_prev_t pfn_prev;
}iterator_if_t;




typedef int (*compare_t)(void *p1,void*p2);
typedef int (*swap_t)(void *p1,void*p2);
void iter_sort(void *begin,void *end,compare_t compare,swap_t swap);

int main(void)
{
    int a[] = {5,3,2,1,4};
    int i = 0;
    bubbleSort(a, a+4);
    for (i = 0; i<sizeof(a)/sizeof(a[0]); i++) {
        printf("%d\n",a[i]);
    }
    return 0;
    
}
void swap( int *p1, int *p2) {
    printf("交换前:p1:%d p2:%d \n",*p1,*p2);
    int  temp;
    temp = *p1;
    *p1 = *p2;
    *p2 = temp;
    printf("交换后:p1:%d p2:%d \n",*p1,*p2);
}
